package com.agritech.smartfarming.strategy;

import com.agritech.smartfarming.model.AgriculturalMachine;
import com.agritech.smartfarming.model.Position;

/**
 * 能源效率 路径规划策略
 */
public class EnergyEfficientPathStrategy implements PathPlanningStrategy {
    @Override
    public void planPath(AgriculturalMachine machine, Position start, Position end) {
        System.out.println("【能源效率路径策略】为 " + machine.getName() + " 规划节能路径");
        System.out.println("起点: " + start);
        System.out.println("终点: " + end);

        // 模拟能源效率路径规划计算
       double directDistance = calculateDistance(start, end);       //directDistance
        // 能源效率路径可能会更长，但能耗更低
        double energyEfficientDistance = directDistance * 1.1;     //energyEfficientDistance
        double fuelSaving = 15.0; // 假设节省15%的燃油


        //String.format()是Java中用于  字符串格式化  的方法，通过占位符和参数生成格式化后的字符串‌

        System.out.println("能源优化路径距离: " + String.format("%.2f", energyEfficientDistance) + "米");   //保留两位小数
        System.out.println("预计行驶时间: " + String.format("%.1f", energyEfficientDistance / 4.5) + "分钟");  //保留一位小数
        System.out.println("预计节省燃油: " + fuelSaving + "%");    //节省燃料的百分比
        System.out.println("已优化坡度和地形，减少能源消耗");
    }

    /**
     * 私有辅助方法，计算两点之间的距离（使用简化的欧几里得距离）
     */
    private double calculateDistance(Position start, Position end) {
        double latDiff = end.getLatitude() - start.getLatitude();         //纬度差
        double longDiff = end.getLongitude() - start.getLongitude();     //经度差
        double altDiff = end.getAltitude() - start.getAltitude();        //高度差

              // 简化计算，实际应考虑地球曲率
        return Math.sqrt(latDiff * latDiff + longDiff * longDiff + altDiff * altDiff) * 111000;
    }
}
